package com.example.lib.io2;

import java.io.File;

/**
 * 列出指定目录下文件或者文件夹，包含子目录中的内容。
 * 也就是列出指定目录下的所有内容。
 *
 * 因为目录中还有目录，只要使用同一个列出目录功能的函数完成即可。
 * 在列出过程中出现的还是目录的话，还可以再次调用本功能。
 * 也就是函数自身调用自身。
 * 这种表现形式，或者编程手法，成为递归。
 *
 * 递归要注意：
 * 1.限定条件。
 * 2.要注意递归的次数，尽量避免内存溢出。
 */
public class d_io_file_20_07_08 {

    public static void main(String[] args) {
        File file = new File("E:\\java毕向东");
        showDir2(file,0);
    }

    public static String addSpace(int level){
        StringBuilder sb=new StringBuilder();
        sb.append("|--");
        for (int i = 1; i < level; i++) {
            sb.insert(0,"|  ");
        }
        return sb.toString();
    }

    public static void showDir2(File dir,int level){
        File[] files = dir.listFiles();
        level++;
        for (File fileChild:files){
            if (fileChild.isDirectory()){
                showDir2(fileChild,level);
            }else{
                System.out.println(addSpace(level)+fileChild);
            }
        }
    }

    public static void showDir(File file){
        File[] files = file.listFiles();
        for (File fileChild:files){
            if (fileChild.isFile()){
                System.out.println(fileChild);
            }else{
                showDir(fileChild);
            }
        }
    }
}
